/**
 * NumberStatistics 类 - 数字统计工具类
 * 提供数字统计功能，应用泛型边界
 */
public class NumberStatistics {
    // 学号绑定（根据要求添加）
    public static final String STUDENT_ID = "202411671452";

    /**
     * 计算平均值
     * 支持 Integer, Double, Float 等 Number 类型
     * 
     * @param <T>     数字类型，必须继承 Number
     * @param numbers 数字容器
     * @return 平均值
     * @throws IllegalArgumentException 当容器为空时抛出
     */
    public static <T extends Number> double average(DataContainer<T> numbers) {
        if (numbers == null || numbers.size() == 0) {
            throw new IllegalArgumentException("数字容器不能为空");
        }

        double sum = 0.0;
        for (int i = 0; i < numbers.size(); i++) {
            T number = numbers.get(i);
            // 将所有 Number 类型转换为 double 进行计算
            sum += number.doubleValue();
        }

        return sum / numbers.size();
    }

    /**
     * 计算最大值
     * 要求数字可比较
     * 
     * @param <T>     数字类型，必须继承 Number 且实现 Comparable
     * @param numbers 数字容器
     * @return 最大值
     * @throws IllegalArgumentException 当容器为空时抛出
     */
    public static <T extends Number & Comparable<? super T>> T max(DataContainer<T> numbers) {
        if (numbers == null || numbers.size() == 0) {
            throw new IllegalArgumentException("数字容器不能为空");
        }

        T maxValue = numbers.get(0);
        for (int i = 1; i < numbers.size(); i++) {
            T current = numbers.get(i);
            if (current.compareTo(maxValue) > 0) {
                maxValue = current;
            }
        }

        return maxValue;
    }
}
